#include "stm32f4xx_hal.h"

void SystemClock_Config(void);
void Error_Handler(void);
static void MX_GPIO_Init(void);

int main(void)
{
    // 初始化 HAL 库
    HAL_Init();

    // 配置系统时钟
    SystemClock_Config();

    // 初始化 GPIO
    MX_GPIO_Init();

    // 无限循环，点亮 LED
    while (1)
    {
        // 设置 GPIO 引脚为高电平，点亮 LED
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
        HAL_Delay(1000); // 延迟 1 秒

        // 设置 GPIO 引脚为低电平，熄灭 LED
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
        HAL_Delay(1000); // 延迟 1 秒
    }
}

/**
 * @brief 系统时钟配置
 */
void SystemClock_Config(void)
{
    // 这里通常包含时钟的配置代码，根据具体的板子进行配置
}

/**
 * @brief GPIO 初始化函数
 */
static void MX_GPIO_Init(void)
{
    // 定义 GPIO 初始化结构体
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    // 使能 GPIOA 时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();

    // 配置 GPIO 引脚 : PA5
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

/**
 * @brief 错误处理函数
 */
void Error_Handler(void)
{
    // 当发生错误时，可以在这里添加代码，例如点亮一个错误指示灯
    while (1)
    {
    }
}